package com.zhj.common.base;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 转换器接口，交给映射框架进行实现
 */
public interface BaseConverter<REQ, PO, DTO> {

    /**
     * Req to po
     *
     * @param req req
     * @return the po
     * @since 1.0.0
     */
    PO reqToPo(REQ req);

    /**
     * Po to dto
     *
     * @param po po
     * @return the dto
     * @since 1.0.0
     */
    DTO poToDto(PO po);

    /**
     * Po to dto
     *
     * @param po po
     * @return the list
     * @since 1.0.0
     */
    default List<DTO> poToDto(List<PO> po) {
        return po.stream().map(this::poToDto).collect(Collectors.toList());
    }

    /**
     * Req to po
     *
     * @param req req
     * @return the list
     * @since 1.0.0
     */
    default List<PO> reqToPo(List<REQ> req) {
        return req.stream().map(this::reqToPo).collect(Collectors.toList());
    }

    /**
     * Po to dto
     *
     * @param po po
     * @return the page
     * @since 1.0.0
     */
    default IPage<DTO> poToDto(IPage<PO> po) {
        return po.convert(this::poToDto);
    }
}
